<?php

namespace Protocols;
// 二进制上传图片协议
// *****logo.png******************

class  BinaryTransfer
{

    //协议头长度
    const  PACKAGE_HEAD_LEN = 5;

    public static function input($recv_buffer)
    {
        // 如果不够一个协议的长度,则继续等待
        if (strlen($recv_buffer) <self::PACKAGE_HEAD_LEN) {
            return 0;
        }
        // 解包
        $package_data = unpack('Ntotal_len/Cname_len',$recv_buffer);
        // 返回包长
        return $package_data['total_len'];
    }

    /**
     * 当 server 调用 send 方法的时候调用
     * @param $data
     * @return mixed
     */
    public static function encode($data)
    {
        // 可以根据自己的需要编码发送给客户端的数据，这里只是当做文本原样返回
        return $data;
    }

    /**
     * 解析客户端发送到这里数据,将处理后的数据给服务器
     * @param $recv_buffer
     * @return array
     */
    public static function decode($recv_buffer)
    {
        // 解包
        $package_data = unpack('Ntotal_len/Cname_len', $recv_buffer);
        // 文件名长度
        $name_len = $package_data['name_len'];
        // 从数据流中截取出文件名
        $file_name = substr($recv_buffer, self::PACKAGE_HEAD_LEN, $name_len);
        // 从数据流中截取出文件二进制数据
        $file_data = substr($recv_buffer, self::PACKAGE_HEAD_LEN + $name_len);
        return array(
            'file_name' => $file_name,
            'file_data' => $file_data,
        );

    }
}
